package com.lee.forum;

import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableScheduling;
// 添加定时任务支持（为redis定时刷新提供支持）
@EnableScheduling
@SpringBootApplication
public class ForumApplication {
	// 生产和开发环境不同：配置文件、article.html/article_editor.html、MyWebconfig、chat.html
	// 获取Spring上下文对象
	public static ConfigurableApplicationContext context;

	public static void main(String[] args) {
		context = SpringApplication.run(ForumApplication.class, args);
	}

	// 添加JSON格式的消息转换器
	@Bean
	public MessageConverter messageConverter() {
		return new Jackson2JsonMessageConverter();
	}
}

// 优化空间：
// 1.很多功能都可以再完善一下，比如可以增加一个评论的楼中楼功能，增加一个全局搜索功能
// 2.前端页面做一个接口集成，后端使用多线程进行处理，可减少tcp握手次数，同时多线程可提高查询效率
// 3.使用了redis，但是存在双写一致问题

// 亮点：
// 1.使用md5+扰动字符实现了更安全的加密算法
// 2.使用了拦截器进行登录校验，异常也使用了全局处理
// 3.项目中集成了redis实现了文章热榜功能
// 4.使用websocket实现了网页实时通信功能，并且使用RabbitMQ完成消息的异步存储

// 难点：
// 1.就是在前后端接口交互的时候，因为你也不知道前端会传什么样的参数，所以在进行校验的时候一定要考虑到各种情况，什么为空不为空，必传非必传，
// 并且有些参数还要根据你接口的具体业务进行更详细的校验，比如一个回复帖子的接口，首先不能给自己回复，回复人得存在，不能被禁言等等情况，
// 并且涉及到接口联调的情况，还要保证数据的一致性，需要使用事务
// 2.redis进行数据存储，的时候，数据结构的选择  \\ redis实现热榜
// 3.使用websocket进行实时通信比较难实现，既需要设计消息格式，又要定义转发规则，以及对消息的持久化也要分情况考虑


// 印象深刻的地方：
// 1.上传图片的时候，图片名和映射地址
// 2.数据库注册用户数量暴增，项目上线的时候被恶意通过脚本注册了（增加验证码功能，一定程度上防止）
// 3.数据库时间和前端显示时间不一致（Json进行序列化的时候对Data类型默认使用的是GMT时区，刚好慢8个小时）
//